// use std::thread::JoinHandle;
// use std::time::{Duration, Instant};

// use tokio::io::AsyncBufReadExt;
// use tracing::{info, debug, warn, error, Level};
// use tracing::info;
// use bc_lib::bc_manager::{BcManager, BcManagerHandler};
use bc_manager::BcManagerHandler;

// 区块链核心逻辑
pub async fn run_blockchain_logic(_bc_manager: BcManagerHandler) {
    println!("Running blockchain core logic...");
    // loop {
    //     tokio::time::sleep(tokio::time::Duration::from_secs(5)).await;
    //     println!("Blockchain is running...");
    // }

    // load_xxx_elapsed("address", async {
    //     let mut mng = bc_manager.lock().await;
    //     mng.load_wallet().await;
    // }).await;

    // Add wallet transactions that aren't already in a block to
    // mapTransactions
    // ReacceptWalletTransactions();

    // if (mapArgs.count("-printblockindex") ||
    //     mapArgs.count("-printblocktree")) {
    //     PrintBlockTree();
    //     return false;
    // }

    // if (mapArgs.count("-printblock")) {
    //     string strMatch = mapArgs["-printblock"];
    //     int nFound = 0;
    //     for (map<uint256, CBlockIndex*>::iterator mi = mapBlockIndex.begin();
    //          mi != mapBlockIndex.end(); ++mi) {
    //         uint256 hash = (*mi).first;
    //         if (strncmp(hash.ToString().c_str(), strMatch.c_str(),
    //                     strMatch.size()) == 0) {
    //             CBlockIndex* pindex = (*mi).second;
    //             CBlock block;
    //             block.ReadFromDisk(pindex);
    //             block.BuildMerkleTree();
    //             block.print();
    //             printf("\n");
    //             nFound++;
    //         }
    //     }
    //     if (nFound == 0)
    //         printf("No blocks matching %s were found\n", strMatch.c_str());
    //     return false;
    // }

    // if (mapArgs.count("-gen")) {
    //     if (mapArgs["-gen"].empty())
    //         fGenerateBitcoins = true;
    //     else
    //         fGenerateBitcoins = (atoi(mapArgs["-gen"].c_str()) != 0);
    // }

    // if (mapArgs.count("-proxy")) {
    //     fUseProxy = true;
    //     addrProxy = CAddress(mapArgs["-proxy"]);
    //     if (!addrProxy.IsValid()) {
    //         wxMessageBox(_("Invalid -proxy address"), "Bitcoin");
    //         return false;
    //     }
    // }

    // if (mapArgs.count("-addnode")) {
    //     foreach (string strAddr, mapMultiArgs["-addnode"]) {
    //         CAddress addr(strAddr, NODE_NETWORK);
    //         addr.nTime = 0; // so it won't relay unless successfully connected
    //         if (addr.IsValid())
    //             AddAddress(addr);
    //     }
    // }

    // if (!CheckDiskSpace())
    // return false;

    // RandAddSeedPerfmon();

    // if (!CreateThread(StartNode, NULL))
    //     wxMessageBox("Error: CreateThread(StartNode) failed", "Bitcoin");

    // if (mapArgs.count("-server") || fDaemon)
    //     CreateThread(ThreadRPCServer, NULL);

    // let server = Server::new();
    // server.start().await;
}

pub async fn check_genesis_info(bc_manager: BcManagerHandler) {
    // println!("Running blockchain core logic...");

    bc_manager.lock().await.check_genesis_info().await;
    bc_manager
        .lock()
        .await
        .check_genesis_info_in_wallets()
        .await;

    println!("Checked genesis info.")
}
